home *** CD-ROM | disk | FTP | other *** search
/ Aminet 30 / Aminet 30 (1999)(Schatztruhe)[!][Apr 1999].iso / Aminet / dev / e / audio_in_e.lha / audio_in_e / playahi.e next >
Text File  |  1999-01-08  |  4KB  |  131 lines

  1. /************************************************************************
  2. *                                    *
  3. *    playahi.e    08.01.1999    by Rainer Müller        *
  4. *                                    *
  5. *  an example how to use AHI with the Amiga E Language            *
  6. *                                    *
  7. *  close the window to stop replaying                    *
  8. *                                    *
  9. *  compile: ec playahi                            *
  10. *                                    *
  11. *  use: playahi name       name = name of the file you want to replay    *
  12. *                                    *
  13. ************************************************************************/
  14.  
  15. OPT PREPROCESS
  16.  
  17. MODULE 'devices/ahi',
  18.        'dos/dos',
  19.       'exec/io',         'exec/memory',  'exec/nodes',  'exec/ports',
  20.      'intuition/intuition',
  21.        'utility/tagitem'
  22.  
  23.  
  24. ENUM ER_NONE, ER_NOOPEN, ER_NOMEM, ER_NOLOAD, ER_NOPORT, ER_NOIOREQ, ER_NODEVICE, ER_NOWINDOW, ER_KICK
  25.  
  26.  
  27. PROC main() HANDLE
  28. DEF file=NIL
  29. DEF  ptr=NIL:PTR TO CHAR
  30. DEF  len=NIL
  31.  
  32.    IF KickVersion(37)=FALSE THEN Raise(ER_KICK)
  33.  
  34.    IF arg[]<>0
  35.       IF (file:=Open      (arg,  MODE_OLDFILE)        ) =NIL THEN Raise(ER_NOOPEN)
  36.       len :=FileLength(arg)
  37.       IF (ptr :=AllocVec  (len,  MEMF_ANY+MEMF_PUBLIC)) =NIL THEN Raise(ER_NOMEM)
  38.       IF       Read      (file, ptr,  len)            <>len THEN Raise(ER_NOLOAD)
  39.  
  40.       playahi(ptr,len)
  41.    ENDIF
  42.  
  43. EXCEPT DO
  44.    IF ptr  THEN FreeVec(ptr)
  45.    IF file THEN Close  (file)
  46.    SELECT exception
  47.       CASE ER_KICK;    PrintF('need Kick 37+\n')
  48.       CASE ER_NOOPEN;  PrintF('couldn`t open file\n')
  49.       CASE ER_NOMEM;   PrintF('no memory\n')
  50.       CASE ER_NOLOAD;  PrintF('problems while reading\n')
  51.       CASE ER_NONE;    PrintF('all OK\n')
  52.    ENDSELECT
  53. ENDPROC
  54.  
  55.  
  56.  
  57.  
  58. PROC playahi(ptr,len) HANDLE
  59. DEF ahidevice=-1
  60. DEF ahiMP=NIL:PTR TO mp
  61. DEF ahiIO=NIL:PTR TO ahirequest
  62. DEF win  =NIL:PTR TO window
  63. DEF signals
  64. DEF type
  65. DEF frequency
  66. DEF pri
  67. DEF volume
  68.  
  69.     type:=AHIST_M8S   -> see ahi documentation for more types
  70.    frequency:=8000      -> frequency you want to replay with
  71.      pri:=128      -> priority you want to allocate the audio channel
  72.       volume:=$10000      -> the volume you want replay with, stored as a LONG fixed value, see ahi-doc formore information
  73.  
  74.    IF (ahiMP:=CreateMsgPort()                          )=NIL THEN Raise(ER_NOPORT)   -> create a message port
  75.    IF (ahiIO:=CreateIORequest(ahiMP, SIZEOF ahirequest))=NIL THEN Raise(ER_NOIOREQ)  -> create a io-request
  76.        ahiIO.version:=4                                     -> see ahi-doc for more information
  77.    IF (ahidevice:=OpenDevice(AHINAME, AHI_DEFAULT_UNIT, ahiIO, 0)) THEN Raise(ER_NODEVICE)  -> open audio-device
  78.  
  79.  
  80.    IF (win:=OpenWindowTagList(NIL,      -> create a just-for-fun window
  81.       [WA_LEFT,     11,
  82.        WA_TOP,        11,
  83.        WA_INNERWIDTH,    80,
  84.        WA_INNERHEIGHT,    20,
  85.        WA_IDCMP,    IDCMP_CLOSEWINDOW,
  86.        WA_FLAGS,    WFLG_SMART_REFRESH OR WFLG_ACTIVATE OR WFLG_DRAGBAR OR
  87.             WFLG_NOCAREREFRESH OR WFLG_RMBTRAP  OR WFLG_CLOSEGADGET,
  88.        WA_AUTOADJUST,    1,  TAG_DONE]))=NIL THEN Raise(ER_NOWINDOW)
  89.  
  90.  
  91.     ahiIO.iostd.mn.ln.pri:=pri            -> fill in the ahi-structures and then replay
  92.     ahiIO.iostd.command  :=CMD_WRITE
  93.     ahiIO.iostd.data     :=ptr            -> pointer to the sampledata
  94.     ahiIO.iostd.length     :=len            -> number of bytes to replay
  95.     ahiIO.iostd.offset     :=0
  96.     ahiIO.type         :=type
  97.     ahiIO.frequency     :=frequency
  98.     ahiIO.volume     :=volume
  99.     ahiIO.position     :=$08000        -> Centered, see ahi-doc
  100.     ahiIO.link         :=NIL
  101.     SendIO(ahiIO)                               -> start replay
  102.  
  103.  
  104. /* wait till replaying is finished, or you stop replaying by closing the window */
  105.     signals:=Wait( Shl(1, win.userport.sigbit) OR Shl(1, ahiMP.sigbit) )
  106.  
  107.     IF (signals AND Shl(1, win.userport.sigbit))
  108.        WriteF('break by user\n')
  109.        AbortIO(ahiIO)
  110.     WaitIO(ahiIO)
  111.     ENDIF
  112.  
  113.     IF (signals AND Shl(1, ahiMP.sigbit))
  114.        WriteF('break by ahi\n')
  115.     ENDIF
  116.  
  117. EXCEPT DO
  118.    IF win      THEN CloseWindow    (win)
  119.    IF ahidevice=0 THEN CloseDevice    (ahiIO)
  120.    IF ahiIO      THEN DeleteIORequest(ahiIO)
  121.    IF ahiMP      THEN DeleteMsgPort  (ahiMP)
  122.    SELECT exception
  123.       CASE ER_NOPORT;     PrintF('couldn`t create port\n')
  124.       CASE ER_NOIOREQ;     PrintF('couldn`t create iorequest\n')
  125.       CASE ER_NODEVICE;  PrintF('couldn`t open ahi-device V4+\n')
  126.       CASE ER_NOWINDOW;  PrintF('couldn`t open window\n')
  127.    ENDSELECT
  128. ENDPROC
  129.  
  130.  
  131.